import babelpolyfill from 'babel-polyfill'
import Vue from 'vue'
import App from './App'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
//import './assets/theme/theme-green/index.css'
import VueRouter from 'vue-router'
import store from './vuex/store'
import Vuex from 'vuex'
//import NProgress from 'nprogress'
//import 'nprogress/nprogress.css'
import routes from './routes'
// import Mock from './mock'
// Mock.bootstrap();
import 'font-awesome/css/font-awesome.min.css'
import Axios from "axios";
import BMap from "vue-baidu-map"

// 设置axios请求的基础路径
Axios.defaults.baseURL = "http://localhost:8080/";
// 将axios设置为全局参数
Vue.prototype.$http = Axios;
Vue.use(BMap, {
  ak: "KupvhQGORCvhPmu1IrZPE2LoMgOwzpLh"
})

Vue.use(ElementUI)
Vue.use(VueRouter)
Vue.use(Vuex)

//NProgress.configure({ showSpinner: false });

const router = new VueRouter({
  routes
})

/* 配置前置拦截器，前置拦截器。前端发出Ajax异步请求前拦截请求，将token绑定到请求头中 */
Axios.interceptors.request.use(res => {
  // 通过localStorage获取到token数据
  let token = localStorage.getItem("token");
  // console.log("前置拦截器的token" + token);
  // token中有值的话，那么就表示当前管理员或者用户已经完成了登陆，可以发送axios请求
  if (token) {
    // 将token绑定到请求投中
    res.headers["token"] = token;
  }
  // console.log(res.headers);
  // 请求放行，将res参数发送到后端
  return res;
}, error => {
  // 拦截请求
  Promise.reject(error);
})

/*
* 配置后置拦截器，后置拦截器——前端接收到后端的反馈信息并进行处理后，进行页面跳转前拦截请求。如果相应参数中的msg显示没有登陆状态，则跳转到登陆界面
* 并放行。
* 如果发生错误则打印错误信息，并拦截请求
* */
Axios.interceptors.response.use(res => {
  let login = res.data;
  // console.log(res.data);
  // console.log(login.msg == "noLogin");
  // 如果login信息中的msg中的信息为noLogin表示，没有登陆，则跳转到登陆页
  if (login.msg == "noLogin") {
    location.href = "/#/login";
  }
  // 不论是有登陆状态或者无登陆状态，最终都会放行页面跳转请求
  return res;
}, error => {
  // 如果出现了异常，打印错误信息
  Promise.reject(error);
})

/* 配置前端拦截器，如果前端的请求没有经过后端的请求的话，就全部由前端拦截器进行拦截 */
router.beforeEach((to, from, next) => {
  // 判断当前的跳转路径是否为登陆或者注册页面，那么直接放行
  if (to.path == "/login" || to.path == "/shopRegister") {
    console.log(1111111111);
    // 清楚localStorage中的各个参数
    localStorage.removeItem("token");
    localStorage.removeItem("loginInfo");
    // 放行请求
    next();
  } else {
    // 如果是访问其他页面的话，就需要先验证loginInfo中是够有登录信息
    let loginInfo = localStorage.getItem("loginInfo");
    if (loginInfo) {
      next();
    } else {
      // 如果没有登陆信息的话，就跳转到登陆页面
      next({path: "/login"});
    }
  }
})

// router.beforeEach((to, from, next) => {
//   //NProgress.start();
//   if (to.path == '/login') {
//     sessionStorage.removeItem('user');
//   }
//   let user = JSON.parse(sessionStorage.getItem('user'));
//   if (!user && to.path != '/login') {
//     next({ path: '/login' })
//   } else {
//     next()
//   }
// })

//router.afterEach(transition => {
//NProgress.done();
//});

new Vue({
  //el: '#app',
  //template: '<App/>',
  router,
  store,
  //components: { App }
  render: h => h(App)
}).$mount('#app')

